﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI.WebControls;
using BLL;
using COMMON;
using VO;

namespace PopPromotoraCallCenter.Admin
{
    public partial class CampanhaCadastro : System.Web.UI.Page
    {
        #region Propriedades
        private int IdAtendente
        {
            get
            {
                var id = 0;
                if (Session["nIdUsuario"] != null)
                    id = Convert.ToInt16(Session["nIdUsuario"]);
                return id;
            }
        }

        #endregion


        protected int PaginaAtualCliente
        {
            set
            {
                ViewState["PaginaCliente"] = value;
            }
            get
            {
                return ViewState["PaginaCliente"] != null ? int.Parse(ViewState["PaginaCliente"].ToString()) : 0;
            }
        }

        protected int PaginaAtualClienteSelecionado
        {
            set
            {
                ViewState["PaginaClienteSelecionado"] = value;
            }
            get
            {
                return ViewState["PaginaClienteSelecionado"] != null ? int.Parse(ViewState["PaginaClienteSelecionado"].ToString()) : 0;
            }
        }

        protected string LetraAtualCliente
        {
            set
            {
                ViewState["LetraCliente"] = value;
            }
            get
            {
                return ViewState["LetraCliente"].ToString();
            }
        }

        protected string LetraAtualClienteSelecionado
        {
            set
            {
                ViewState["LetraClienteSelecionado"] = value;
            }
            get
            {
                return ViewState["LetraClienteSelecionado"].ToString();
            }
        }

        protected List<Cliente> ListCliente
        {
            set
            {
                ViewState["ListCliente"] = value;
            }
            get
            {
                if (ViewState["ListCliente"] != null)
                {
                    return (List<Cliente>)ViewState["ListCliente"];
                }
                return new List<Cliente>();
            }
        }

        protected List<CampanhaCliente> ListClienteSelecionado
        {
            set
            {
                ViewState["ListClienteSelecionado"] = value;
            }
            get
            {
                if (ViewState["ListClienteSelecionado"] != null)
                {
                    return (List<CampanhaCliente>)ViewState["ListClienteSelecionado"];
                }
                return new List<CampanhaCliente>();
            }
        }

        protected int PaginaAtualAtendente
        {
            set
            {
                ViewState["PaginaAtendente"] = value;
            }
            get
            {
                return ViewState["PaginaAtendente"] != null ? int.Parse(ViewState["PaginaAtendente"].ToString()) : 0;
            }
        }

        protected int PaginaAtualAtendenteSelecionado
        {
            set
            {
                ViewState["PaginaAtendenteSelecionado"] = value;
            }
            get
            {
                return ViewState["PaginaAtendenteSelecionado"] != null ? int.Parse(ViewState["PaginaAtendenteSelecionado"].ToString()) : 0;
            }
        }

        protected string LetraAtualAtendente
        {
            set
            {
                ViewState["LetraAtendente"] = value;
            }
            get
            {
                return ViewState["LetraAtendente"].ToString();
            }
        }

        protected string LetraAtualAtendenteSelecionado
        {
            set
            {
                ViewState["LetraAtendenteSelecionado"] = value;
            }
            get
            {
                return ViewState["LetraAtendenteSelecionado"].ToString();
            }
        }

        protected List<CampanhaAtendente> ListAtendente
        {
            set
            {
                ViewState["ListAtendente"] = value;
            }
            get
            {
                if (ViewState["ListAtendente"] != null)
                {
                    return (List<CampanhaAtendente>)ViewState["ListAtendente"];
                }
                return new List<CampanhaAtendente>();
            }
        }

        protected List<CampanhaAtendente> ListAtendenteSelecionado
        {
            set
            {
                ViewState["ListAtendenteSelecionado"] = value;
            }
            get
            {
                if (ViewState["ListAtendenteSelecionado"] != null)
                {
                    return (List<CampanhaAtendente>)ViewState["ListAtendenteSelecionado"];
                }
                return new List<CampanhaAtendente>();
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) return;
            if (IdAtendente <= 0) return;
            CarregarComboCopiaCampanha();
            CarregaCombosFiltros();
            CarregarGridCampanha();
            CarregarConvenio();
            CarregarSituacao();
            CarregarRegra();
            //CarregarComboIdadeFiltro();
            CarregarComboTipoCampanha();
            CarregarCheckUFFiltro();
            CarregarCheckCidadeFiltro();
            CarregarCheckBairroFiltro();
            CarregarCheckBancosFiltro();
            CarregarCheckConvenioFiltro();
            CarregarComboOrgaoSiape();
            //CarregarComboPensionista();
            btnNovo.Visible = true;
        }

        #region Metodos

        #region CarregarComboCopiaCampanha
        protected void CarregarComboCopiaCampanha()
        {
            var retorno = CampanhaBLL.Select();
            if (retorno.Error == Enumerator.Error.Success)
            {
                var list = retorno.List;
                ddlCampanhaCopia.DataTextField = "nomeCampanha";
                ddlCampanhaCopia.DataValueField = "idCampanha";
                ddlCampanhaCopia.DataSource = list;
                ddlCampanhaCopia.DataBind();
                ddlCampanhaCopia.Items.Insert(0, new ListItem("Não copiar", "0"));
            }
            else
                Funcao.Alert(Page, retorno.Message);
            //lblMsgGrid.Text = retorno.Message;
        }
        protected void CarregarComboTipoCampanha()
        {
            var retorno = CampanhaBLL.SelectTipoCampanha();
            if (retorno.Error == Enumerator.Error.Success)
            {
                var list = retorno.List;
                ddlTipoCampanha.DataTextField = "TipoCampanha";
                ddlTipoCampanha.DataValueField = "idTipoCampanha";
                ddlTipoCampanha.DataSource = list;
                ddlTipoCampanha.DataBind();
                ddlTipoCampanha.Items.Insert(0, new ListItem("Selecione", "0"));
            }
            else
                Funcao.Alert(Page, retorno.Message);
            //lblMsgGrid.Text = retorno.Message;
        }
        #endregion

        //#region CarregarComboIdadeFiltro
        //protected void CarregarComboIdadeFiltro()
        //{
        //    ddlIdadeFiltro.Items.Clear();
        //    const int idadeMinima = 18;
        //    const int idadeMaxima = 80;
        //    for (int i = idadeMinima; i <= idadeMaxima; i++)
        //    {
        //        ddlIdadeFiltro.Items.Add(i.ToString());
        //    }
        //    ddlIdadeFiltro.Items.Insert(0, new ListItem("TODAS", "0"));
        //}
        //#endregion

        //#region CarregarComboPensionista
        //protected void CarregarComboPensionista()
        //{
        //    ddlPensionista.Items.Clear();

        //    ddlPensionista.Items.Insert(0, new ListItem("Selecione", "100"));
        //    ddlPensionista.Items.Insert(1, new ListItem("NÃO", "0"));
        //    ddlPensionista.Items.Insert(2, new ListItem("SIM", "1"));
        //}
        //#endregion

        #region CarregarComboOrgaoSiape
        protected void CarregarComboOrgaoSiape()
        {
            ddlOrgao.Items.Clear();

            var result = OrgaoSiapeBLL.SelectClienteFiltro();

            if (result.Error == Enumerator.Error.Success)
            {
                ddlOrgao.DataValueField = "idOrgaoSiape";
                ddlOrgao.DataTextField = "sglOrgaoSiape";
                ddlOrgao.DataSource = result.List;
                ddlOrgao.DataBind();
            }
            else
                Funcao.Alert(Page, result.Message);

            ddlOrgao.Items.Insert(0, new ListItem("TODOS", "0"));

        }
        #endregion


        #region CarregarCheckUFFiltro
        protected void CarregarCheckUFFiltro()
        {
            cblUFFiltro.Items.Clear();
            var retorno = ClienteBLL.SelectUFFiltro();
            if (retorno.Error == Enumerator.Error.Success)
            {
                foreach (string obj in retorno.List)
                {
                    cblUFFiltro.Items.Add(obj);
                }
            }
            else
                Funcao.Alert(Page, retorno.Message);
        }
        #endregion

        #region CarregarCheckCidadeFiltro
        protected void CarregarCheckCidadeFiltro()
        {
            cblCidadeFiltro.Items.Clear();
            var retorno = ClienteBLL.SelectCidadeFiltro();
            if (retorno.Error == Enumerator.Error.Success)
            {
                foreach (string obj in retorno.List)
                {
                    cblCidadeFiltro.Items.Add(obj);
                }
            }
            else
                Funcao.Alert(Page, retorno.Message);
        }
        #endregion

        #region CarregarCheckBairroFiltro
        protected void CarregarCheckBairroFiltro()
        {
            cblBairroFiltro.Items.Clear();
            var retorno = ClienteBLL.SelectBairroFiltro();
            if (retorno.Error == Enumerator.Error.Success)
            {
                foreach (string obj in retorno.List)
                {
                    cblBairroFiltro.Items.Add(obj);
                }
            }
            else
                Funcao.Alert(Page, retorno.Message);
        }
        #endregion

        #region CarregarCheckBancosFiltro
        protected void CarregarCheckBancosFiltro()
        {
            cblBancosFiltro.Items.Clear();
            var retorno = ClienteBLL.SelectBancosFiltro();
            if (retorno.Error == Enumerator.Error.Success)
            {
                foreach (string obj in retorno.List)
                {
                    cblBancosFiltro.Items.Add(obj);
                }
            }
            else
                Funcao.Alert(Page, retorno.Message);
        }
        #endregion

        #region CarregarCheckConvenioFiltro
        protected void CarregarCheckConvenioFiltro()
        {
            cblConvenioFiltro.Items.Clear();
            var retorno = ClienteBLL.SelectConvenioFiltro();
            if (retorno.Error == Enumerator.Error.Success)
            {
                foreach (string obj in retorno.List)
                {
                    cblConvenioFiltro.Items.Add(obj);
                }
            }
            else
                Funcao.Alert(Page, retorno.Message);
        }
        #endregion

        #region CarregarComboFiltrosBusca
        protected void CarregaCombosFiltros()
        {
            var retorno = CampanhaBLL.Select();
            if (retorno.Error == Enumerator.Error.Success)
            {
                var resultado = from l in retorno.List
                                group l by new { l.TipoCampanha, l.idTipoCampanha } into g
                                select new { g.Key.TipoCampanha, g.Key.idTipoCampanha };
                ddlFiltroTipo.DataTextField = "TipoCampanha";
                ddlFiltroTipo.DataValueField = "idTipoCampanha";
                ddlFiltroTipo.DataSource = resultado;
                ddlFiltroTipo.DataBind();
                ddlFiltroTipo.Items.Insert(0, new ListItem("selecione", "0"));

                var resultado2 = from l in retorno.List
                                 group l by new { l.Convenio, l.idEmpresa } into g
                                 select new { g.Key.Convenio, g.Key.idEmpresa };

                ddlFiltroConvenio.DataTextField = "Convenio";
                ddlFiltroConvenio.DataValueField = "idEmpresa";
                ddlFiltroConvenio.DataSource = resultado2;
                ddlFiltroConvenio.DataBind();
                ddlFiltroConvenio.Items.Insert(0, new ListItem("selecione", "0"));


            }
            else
                Funcao.Alert(Page, retorno.Message);
            //lblMsgGrid.Text = retorno.Message;
        }




        #endregion


        #region CarregarGridCampanha
        protected void CarregarGridCampanha()
        {
            var retorno = CampanhaBLL.Select(idConvenio: Convert.ToInt16(ddlFiltroConvenio.SelectedValue), idTipo: Convert.ToInt16(ddlFiltroTipo.SelectedValue));
            if (retorno.Error == Enumerator.Error.Success)
            {
                var list = retorno.List;
                gvCampanha.DataSource = list;
                gvCampanha.DataBind();


            }
            else
                Funcao.Alert(Page, retorno.Message);
            //lblMsgGrid.Text = retorno.Message;
        }
        #endregion

        #region CarregarGridSituacao
        protected void CarregarGridSituacao()
        {
            var retorno = CampanhaStatusBLL.Select(int.Parse(hfCampanhaId.Value));
            if (retorno.Error == Enumerator.Error.Success)
            {
                var list = retorno.List;
                gvSituacao.DataSource = list.Count > 0 ? list : null;
                gvSituacao.DataBind();
            }
            else
                Funcao.Alert(Page, retorno.Message);
            //lblMsg.Text = retorno.Message;
        }
        #endregion

        #region CarregarConvenio
        protected void CarregarConvenio()
        {
            var retorno = ConvenioBLL.Select();
            if (retorno.Error == Enumerator.Error.Success)
            {
                ddlConvenio.DataTextField = "NomeConvenio";
                ddlConvenio.DataValueField = "idEmpresa";
                ddlConvenio.DataSource = retorno.List;
                ddlConvenio.DataBind();
                ddlConvenio.Items.Insert(0, new ListItem("selecione", "0"));
            }
            else
                Funcao.Alert(Page, retorno.Message);
            //lblMsg.Text = retorno.Message;
        }
        #endregion

        #region CarregarSituacao
        protected void CarregarSituacao()
        {
            var retorno = StatusAtendimentoBLL.Select();
            if (retorno.Error == Enumerator.Error.Success)
            {
                ddlSituacao.DataTextField = "nome";
                ddlSituacao.DataValueField = "idStatus";
                ddlSituacao.DataSource = retorno.List;
                ddlSituacao.DataBind();
                ddlSituacao.Items.Insert(0, new ListItem("selecione", "0"));
            }
            else if (retorno.Error == Enumerator.Error.Failed)
                Funcao.Alert(Page, retorno.Message);
            //lblMsg.Text = retorno.Message;
        }
        #endregion

        #region CarregarRegra
        protected void CarregarRegra()
        {
            var retorno = RegraAtendimentoBLL.Select();
            if (retorno.Error == Enumerator.Error.Success)
            {
                cblRegra.DataTextField = "NomeRegra";
                cblRegra.DataValueField = "idRegraCallCenter";
                cblRegra.DataSource = retorno.List;
                cblRegra.DataBind();
            }
            else if (retorno.Error == Enumerator.Error.Failed)
                Funcao.Alert(Page, retorno.Message);
            //lblMsg.Text = retorno.Message;
        }
        #endregion

        #region CarregarRptRegra
        protected void CarregarRptRegra(Repeater rpt, int idCampanhaStatus)
        {
            var retorno = CampanhaStatusRegraBLL.Select(idCampanhaStatus);
            if (retorno.Error == Enumerator.Error.Success)
            {
                rpt.DataSource = retorno.List;
                rpt.DataBind();
            }
            else
                Funcao.Alert(Page, retorno.Message);
            //lblMsg.Text = retorno.Message;
        }
        #endregion

        #region CarregarListBoxCliente
        protected void CarregarListBoxCliente()
        {
            var cpf = txtCPFFiltro.Text.Trim();
            var nomeCliente = txtNomeFiltro.Text.Trim();
            //var tipoIdade = int.Parse(ddlTipoIdadeFiltro.SelectedValue);
            var idadeDE = txtIdadeDe.Text.Trim();
            var idadeAte = txtIdadeAte.Text.Trim();
            var uf = Funcao.ReturnListCheck(cblUFFiltro);
            var cidade = Funcao.ReturnListCheck(cblCidadeFiltro);
            var bairro = Funcao.ReturnListCheck(cblBairroFiltro);
            var cep = txtCEPFiltro.Text.Trim();
            //var tipoPMT = int.Parse(ddlTipoPMTFiltro.SelectedValue);
            var pmtDe = txtPMTFiltroDe.Text.Trim();
            var pmtAte = txtPMTFiltroAte.Text.Trim();
            //var tipoScore = int.Parse(ddlTipoScore.SelectedValue);
            var scoreDe = txtScoreFiltroDE.Text.Trim();
            var scoreAte = txtScoreFiltroAte.Text.Trim();
            //var tipoMargem = int.Parse(ddlTipoMargemFiltro.SelectedValue);
            var margemDe = txtMargemFiltroDe.Text.Trim();
            var margemAte = txtMargemFiltroAte.Text.Trim();
            var bancos = Funcao.ReturnListCheck(cblBancosFiltro);
            var convenio = Funcao.ReturnListCheck(cblConvenioFiltro);
            //var tipoPrazo = int.Parse(ddlTipoPrazoFiltro.SelectedValue);
            var prazoDe = txtPrazoFiltroDe.Text.Trim();
            var prazoAte = txtPrazoFiltroAte.Text.Trim();
            int ret = 0;

            var obj = new FiltroCliente
                          {
                              CPF = cpf,
                              Nome = nomeCliente,
                              //TipoIdade = tipoIdade,
                              IdadeDe = Convert.ToInt16(int.TryParse(idadeDE, out ret)),
                              IdadeAte = Convert.ToInt16(int.TryParse(idadeAte, out ret)),
                              UF = (List<string>)uf,
                              Cidade = (List<string>)cidade,
                              Bairro = (List<string>)bairro,
                              CEP = cep,
                              //TipoPMT = tipoPMT

                          };

            obj.PMTDe = !string.IsNullOrWhiteSpace(pmtDe) ? (double?)double.Parse(pmtDe) : null;

            obj.PMTAte = !string.IsNullOrWhiteSpace(pmtAte) ? (double?)double.Parse(pmtAte) : null;

            //obj.TipoScore = tipoScore;

            obj.ScoreDe = !string.IsNullOrWhiteSpace(scoreDe) ? (double?)double.Parse(scoreDe) : null;

            obj.ScoreAte = !string.IsNullOrWhiteSpace(scoreAte) ? (double?)double.Parse(scoreAte) : null;

            //obj.TipoMargem = tipoMargem;

            obj.MargemDe = !string.IsNullOrWhiteSpace(margemDe) ? (double?)double.Parse(margemDe) : null;

            obj.MargemAte = !string.IsNullOrWhiteSpace(margemAte) ? (double?)double.Parse(margemAte) : null;

            obj.Bancos = (List<string>)bancos;
            obj.Convenio = (List<string>)convenio;

            //obj.TipoPrazo = tipoPrazo;

            obj.PrazoDe = !string.IsNullOrWhiteSpace(prazoDe) ? (int?)int.Parse(prazoDe) : null;
            obj.PrazoAte = !string.IsNullOrWhiteSpace(prazoAte) ? (int?)int.Parse(prazoAte) : null;

            //fgPensionista = flgPensionista.Checked && flgPensionista.Checked
            //obj.fgPensionista = Convert.ToInt16(ddlPensionista.SelectedValue);
            //Convert.ToInt16(ddlPensionista.SelectedValue);

            obj.strOrgao = Convert.ToInt16(ddlOrgao.SelectedValue) != 0 ? ddlOrgao.SelectedValue : null;

            //#if DEBUG
            //hfCampanhaId.Value = "6";
            //#endif

            obj.idCampanha = int.Parse(hfCampanhaId.Value);

            var retorno = new Retorno<Cliente>();
            if (ListCliente.Count <= 0)
            {
                retorno = ClienteBLL.SelectClienteFiltro(obj);
                ListCliente = (List<Cliente>)retorno.List;
            }
            else
            {
                retorno.Error = Enumerator.Error.Success;
                retorno.Message = "OK";
                retorno.List = ListCliente;
            }

            //var retorno = ClienteBLL.SelectClienteFiltro(obj);
            if (retorno.Error == Enumerator.Error.Success)
            {
                if (ListCliente.Count > 0)
                {
                    var pg = new PagedDataSource
                                 {
                                     DataSource = retorno.List, PageSize = 500, AllowPaging = true
                                 };
                    var paginaAtual = 1;
                    if (!int.TryParse(ddlPaginaCliente.SelectedValue, out paginaAtual))
                        paginaAtual = 0;
                    else
                        paginaAtual = paginaAtual - 1;
                    pg.CurrentPageIndex = paginaAtual;
                    CarregaComboPaginaCliente(pg.PageCount, ddlPaginaCliente);

                    lbClientePesquisa.DataTextField = "nmCliente";
                    lbClientePesquisa.DataValueField = "idCliente";
                    lbClientePesquisa.DataSource = pg;
                    lbClientePesquisa.DataBind();
                    lblQuantidadeClientePesquisa.Text = pg.DataSourceCount.ToString();
                    ListCliente = (List<Cliente>)retorno.List;
                }
                else
                    Funcao.Alert(Page, "Nenhum cliente encontrado com estes parametros");
            }
            else
                Funcao.Alert(Page, retorno.Message);
        }
        #endregion

        #region CarregaComboPaginaCliente
        protected void CarregaComboPaginaCliente(int pag, DropDownList drop)
        {
            drop.Items.Clear();
            for (var a = 1; a <= pag; a++)
            {
                drop.Items.Add(a.ToString());
            }
        }
        #endregion

        #region CarregaComboPaginaAtendente
        protected void CarregaComboPaginaAtendente(int pag, DropDownList drop)
        {
            drop.Items.Clear();
            for (var a = 1; a <= pag; a++)
            {
                drop.Items.Add(a.ToString());
            }
        }
        #endregion

        #region CarregarListBoxClienteSelecionado
        protected void CarregarListBoxClienteSelecionado()
        {
            var idCampanha = int.Parse(hfCampanhaId.Value);
            //var cpf = txtCPFFiltro.Text.Trim();
            //var nomeCliente = txtNomeFiltro.Text.Trim();
            ////var tipoIdade = int.Parse(ddlTipoIdadeFiltro.SelectedValue);
            //var idadeDe = txtIdadeDe.Text.Trim();
            //var idadeAte = txtIdadeAte.Text.Trim();
            //var uf = Funcao.ReturnListCheck(cblUFFiltro);
            //var cidade = Funcao.ReturnListCheck(cblCidadeFiltro);
            //var bairro = Funcao.ReturnListCheck(cblBairroFiltro);
            //var cep = txtCEPFiltro.Text.Trim();
            ////var tipoPMT = int.Parse(ddlTipoPMTFiltro.SelectedValue);
            //var pmtDe = txtPMTFiltroDe.Text.Trim();
            //var pmtAte = txtPMTFiltroAte.Text.Trim();
            ////var tipoScore = int.Parse(ddlTipoScore.SelectedValue);
            //var scoreDe = txtScoreFiltroDE.Text.Trim();
            //var scoreAte = txtScoreFiltroAte.Text.Trim();
            ////var tipoMargem = int.Parse(ddlTipoMargemFiltro.SelectedValue);
            //var margemDe = txtMargemFiltroDe.Text.Trim();
            //var margemAte = txtMargemFiltroDe.Text.Trim();
            //var bancos = Funcao.ReturnListCheck(cblBancosFiltro);
            //var convenio = Funcao.ReturnListCheck(cblConvenioFiltro);
            ////var tipoPrazo = int.Parse(ddlTipoPrazoFiltro.SelectedValue);
            //var prazoDe = txtPrazoFiltroDe.Text.Trim();
            //var prazoAte = txtPrazoFiltroAte.Text.Trim();
            //var obj = new FiltroCliente { CPF = cpf, Nome = nomeCliente };
            //int ret = 0;
            //obj.IdadeDe = Convert.ToInt16(int.TryParse(idadeDe, out ret));
            //obj.IdadeAte = Convert.ToInt16(int.TryParse(idadeAte, out ret));
            //obj.UF = (List<string>)uf;
            //obj.Cidade = (List<string>)cidade;
            //obj.Bairro = (List<string>)bairro;
            //obj.CEP = cep;
            ////obj.TipoPMT = tipoPMT;

            //obj.PMTDe = !string.IsNullOrWhiteSpace(pmtDe) ? (double?)double.Parse(pmtDe) : null;
            //obj.PMTAte = !string.IsNullOrWhiteSpace(pmtAte) ? (double?)double.Parse(pmtAte) : null;

            ////obj.TipoScore = tipoScore;

            //obj.ScoreDe = !string.IsNullOrWhiteSpace(scoreDe) ? (double?)double.Parse(scoreDe) : null;
            //obj.ScoreAte = !string.IsNullOrWhiteSpace(scoreAte) ? (double?)double.Parse(scoreAte) : null;

            ////obj.TipoMargem = tipoMargem;

            //obj.MargemDe = !string.IsNullOrWhiteSpace(margemDe) ? (double?)double.Parse(margemDe) : null;
            //obj.MargemAte = !string.IsNullOrWhiteSpace(margemAte) ? (double?)double.Parse(margemAte) : null;

            //obj.Bancos = (List<string>)bancos;
            //obj.Convenio = (List<string>)convenio;
            ////obj.TipoPrazo = tipoPrazo;

            //obj.PrazoDe = !string.IsNullOrWhiteSpace(prazoDe) ? (int?)int.Parse(prazoDe) : null;
            //obj.PrazoAte = !string.IsNullOrWhiteSpace(prazoAte) ? (int?)int.Parse(prazoAte) : null;

            var retorno = new Retorno<CampanhaCliente>();
            if (ListClienteSelecionado.Count <= 0)
            {
                retorno = CampanhaClienteBLL.SelectClienteCampanhaBLL(idCampanha);
                ListClienteSelecionado = (List<CampanhaCliente>)retorno.List;
            }
            else
            {
                retorno.Error = Enumerator.Error.Success;
                retorno.Message = "OK";
                retorno.List = ListClienteSelecionado;
            }

            //var retorno = CampanhaClienteBLL.Select(idCampanha, obj);
            if (retorno.Error == Enumerator.Error.Success)
            {
                if (ListClienteSelecionado.Count>0)
                {
                    var pg = new PagedDataSource();
                    pg.DataSource = retorno.List;
                    pg.PageSize = 500;
                    pg.AllowPaging = true;
                    int paginaAtual = 1;
                    if (!int.TryParse(ddlPaginaClienteSelecionado.SelectedValue, out paginaAtual))
                        paginaAtual = 0;
                    else
                        paginaAtual = paginaAtual - 1;
                    pg.CurrentPageIndex = paginaAtual;
                    CarregaComboPaginaCliente(pg.PageCount, ddlPaginaClienteSelecionado);

                    lbClienteSelecionado.DataTextField = "NomeCliente";
                    lbClienteSelecionado.DataValueField = "idCliente";
                    //lbClienteSelecionado.DataSource = retorno.List;
                    lbClienteSelecionado.DataSource = pg;

                    //Total de clientes da campanha
                    var retornoQ = ListClienteSelecionado.Count;//CampanhaClienteBLL.QuantidadeClienteCampanha(idCampanha);
                    //if (retornoQ.Error == Enumerator.Error.Success)
                    //{
                    lblTotalClienteCampanha.Text = retornoQ.ToString();
                    //}
                    //else
                    //    Funcao.Alert(Page, retornoQ.Message);
                }

                
            }
            else
                Funcao.Alert(Page, retorno.Message);
            lbClienteSelecionado.DataBind();
        }
        #endregion

        #region EditarCampanha
        protected void EditarCampanha(int idCampanha)
        {
            LimparCampos();

            var retorno = CampanhaBLL.Select(idCampanha);
            if (retorno.Error == Enumerator.Error.Success)
            {
                var list = retorno.List;
                if (list.Count > 0)
                {
                    hfCampanhaId.Value = list[0].idCampanha.ToString();
                    txtNomeCampanha.Text = list[0].nomeCampanha;
                    txtDescricao.Text = list[0].descricao;
                    txtApelido.Text = list[0].alias;
                    txtDataFinalizacao.Text = list[0].dtFinalizacao.ToString();
                    ddlConvenio.SelectedIndex = ddlConvenio.Items.IndexOf(ddlConvenio.Items.FindByValue(list[0].idEmpresa.ToString()));
                    cbAtivo.Checked = list[0].fgAtivo;
                    mvCampanha.ActiveViewIndex = 1;
                    ddlTipoCampanha.SelectedValue = list[0].idTipoCampanha.ToString();
                    dvGravar.Visible = true;
                    btnGravar.Visible = true;
                    lblCopiar.Visible = false;
                    thCopiardados.Visible = false;
                    ddlCampanhaCopia.Visible = false;
                    cblCampanhaCopia.Visible = false;
                }
            }
        }
        #endregion

        #region ExcluirCampanha
        protected void ExcluirCampanha(int idCampanha)
        {
            var retorno = CampanhaBLL.Delete(idCampanha);
            if (retorno.Error == Enumerator.Error.Success)
            {
                Funcao.Alert(Page, "Excluído com sucesso");
                //lblMsg.Text = "Excluído com sucesso";
                CarregarGridCampanha();
            }
            else
                Funcao.Alert(Page, retorno.Message);
            //lblMsg.Text = retorno.Message;
        }
        #endregion

        #region EditarSituacao
        protected void EditarSituacao(int idSituacao, int idCampanhaStatus, int qtd, int dias)
        {
            //Deixar selecionado no combo a situação a ser editada
            ddlSituacao.SelectedIndex = ddlSituacao.Items.IndexOf(ddlSituacao.Items.FindByValue(idSituacao.ToString()));
            //Desabilitar combo
            ddlSituacao.Enabled = false;
            hfidCampanhaStatus.Value = idCampanhaStatus.ToString();
            txtQtdDias.Text = dias.ToString();
            txtIncidencia.Text = qtd.ToString();
            //chkBloquear.Checked = fgBloqueio;
            //Deixar selecionado no checkboxlist as regras da situação selecionada
            var retorno = CampanhaStatusRegraBLL.Select(idCampanhaStatus);

            if (retorno.Error == Enumerator.Error.Success)
            {
                var list = retorno.List;
                foreach (ListItem item in cblRegra.Items)
                {
                    foreach (var obj in list)
                    {
                        item.Selected = item.Value.Equals(obj.idRegra.ToString());
                        if (item.Selected)
                            break;
                    }
                }
            }
            else
                Funcao.Alert(Page, retorno.Message);
            //lblMsg.Text = retorno.Message;
        }
        #endregion

        #region ExcluirSituacao
        protected void ExcluirSituacao(int idCampanhaStatus)
        {
            if (ExcluirRegraSituacaoCampanha(idCampanhaStatus) == COMMON.Enumerator.Error.Success)
            {
                var retorno = CampanhaStatusBLL.Delete(idCampanhaStatus);
                if (retorno.Error == Enumerator.Error.Success)
                {
                    Funcao.Alert(Page, "Excluído com sucesso");
                    //lblMsg.Text = "Excluído com sucesso";
                    CarregarGridSituacao();
                }
                else
                    Funcao.Alert(Page, retorno.Message);
                //lblMsg.Text = retorno.Message;
            }
        }
        #endregion

        #region ExcluirRegraSituacaoCampanha
        protected COMMON.Enumerator.Error ExcluirRegraSituacaoCampanha(int idCampanhaStatus)
        {
            var retorno = CampanhaStatusRegraBLL.Delete(idCampanhaStatus);
            return retorno.Error;
        }
        #endregion

        #region Situacao
        protected void Situacao(int idCampanha)
        {
            //Preenche os campos de cadastro
            EditarCampanha(idCampanha);
            //Habilita formulário de cadastro de situação e regra
            ConfiguraTelaSituacao();
            //Carregar grid das situações da campanha
            CarregarGridSituacao();
        }
        #endregion

        #region Cliente
        protected void Cliente(int idCampanha)
        {
            //Preenche os campos de cadastro
            EditarCampanha(idCampanha);
            //Habilita formulário de cadastro de cliente
            ConfiguraTelaCliente();
            mvCampanha.ActiveViewIndex = 1;
            //Carregar clientes não cadastrados na campanha
            //CarregarListBoxCliente();
            //Carregar clientes cadastrados na campanha
            CarregarListBoxClienteSelecionado();
        }
        #endregion

        #region Atendentes
        protected void Atendentes(int idCampanha)
        {
            //Preenche os campos de cadastro
            EditarCampanha(idCampanha);
            //Habilita formulário de cadastro de cliente
            ConfiguraTelaAtendente();
            mvCampanha.ActiveViewIndex = 1;
            //Carregar clientes não cadastrados na campanha
            CarregarListBoxAtendente();
            //Carregar clientes cadastrados na campanha
            CarregarListBoxAtendenteSelecionado();
        }
        #endregion

        #region HabilitarDesabilitar
        protected void HabilitarDesabilitar(int idCampanha, bool statusAtual)
        {
            var obj = new Campanha();
            obj.idCampanha = idCampanha;
            obj.fgAtivo = !statusAtual;
            var retorno = CampanhaBLL.UpdateStatus(obj);
            if (retorno.Error == Enumerator.Error.Success)
                Funcao.Alert(Page, "Status atualizado");
            //lblMsg.Text = "Status atualizado";
            else
                Funcao.Alert(Page, retorno.Message);
            //lblMsg.Text = retorno.Message;
            CarregarGridCampanha();
        }
        #endregion

        #region LimparCampos
        protected void LimparCampos()
        {
            txtNomeCampanha.Text = string.Empty;
            txtDescricao.Text = string.Empty;
            txtApelido.Text = string.Empty;
            txtDataFinalizacao.Text = string.Empty;
            ddlConvenio.SelectedIndex = 0;
            ddlSituacao.SelectedIndex = 0;
            cblRegra.SelectedIndex = -1;
            lblMsg.Text = string.Empty;
            hfCampanhaId.Value = "0";
            cbAtivo.Checked = true;
            pnlSituacao.Visible = false;
            pnlSituacao.Visible = false;
            txtNomeCampanha.Enabled = true;
            txtDescricao.Enabled = true;
            txtApelido.Enabled = true;
            txtDataFinalizacao.Enabled = true;
            ddlConvenio.Enabled = true;
            btnGravar.Visible = true;
            dvGravar.Visible = true;
            cbAtivo.Enabled = true;
            ddlCampanhaCopia.Enabled = true;
            cblCampanhaCopia.Enabled = true;
            btnNovaSituacao.Visible = false;
            pnlCliente.Visible = false;
            pnlAtendente.Visible = false;
            ddlCampanhaCopia.SelectedIndex = 0;
            cblCampanhaCopia.SelectedIndex = -1;
        }
        #endregion

        #region LimparCamposSituacao
        protected void LimparCamposSituacao()
        {
            ddlSituacao.Enabled = true;
            hfidCampanhaStatus.Value = "0";
            ddlSituacao.SelectedIndex = 0;
            foreach (ListItem item in cblRegra.Items)
            {
                item.Selected = false;
            }
        }
        #endregion

        #region ConfiguraTelaSituacao
        protected void ConfiguraTelaSituacao()
        {
            pnlSituacao.Visible = true;
            pnlCliente.Visible = false;
            txtNomeCampanha.Enabled = false;
            txtDescricao.Enabled = false;
            txtApelido.Enabled = false;
            txtDataFinalizacao.Enabled = false;
            ddlConvenio.Enabled = false;
            ddlTipoCampanha.Enabled = false;
            btnGravar.Visible = false;
            dvGravar.Visible = false;
            cbAtivo.Enabled = false;
            btnNovaSituacao.Visible = true;
            pnlAtendente.Visible = false;
        }
        #endregion

        #region ConfiguraTelaCliente
        protected void ConfiguraTelaCliente()
        {
            pnlSituacao.Visible = false;
            pnlCliente.Visible = true;
            txtNomeCampanha.Enabled = false;
            txtDescricao.Enabled = false;
            txtApelido.Enabled = false;
            txtDataFinalizacao.Enabled = false;
            ddlConvenio.Enabled = false;
            btnGravar.Visible = false;
            cbAtivo.Enabled = false;
            btnNovaSituacao.Visible = false;
            pnlAtendente.Visible = false;
            ddlCampanhaCopia.Enabled = false;
            cblCampanhaCopia.Enabled = false;
        }
        #endregion

        #region ConfiguraTelaAtendente
        protected void ConfiguraTelaAtendente()
        {
            pnlSituacao.Visible = false;
            pnlCliente.Visible = false;
            txtNomeCampanha.Enabled = false;
            txtDescricao.Enabled = false;
            txtApelido.Enabled = false;
            txtDataFinalizacao.Enabled = false;
            ddlConvenio.Enabled = false;
            btnGravar.Visible = false;
            cbAtivo.Enabled = false;
            btnNovaSituacao.Visible = false;
            pnlAtendente.Visible = true;
        }
        #endregion

        #region GravarCampanha
        protected void GravarCampanha()
        {
            if (ValidarCampanha())
            {
                //Recupera idCampanha
                int idCampanha = int.Parse(hfCampanhaId.Value);
                //Popula objeto
                var obj = new Campanha
                              {
                                  nomeCampanha = txtNomeCampanha.Text.Trim(),
                                  descricao = txtDescricao.Text.Trim(),
                                  alias = txtApelido.Text.Trim(),
                                  idEmpresa = int.Parse(ddlConvenio.SelectedValue),
                                  dtCadastro = DateTime.Now,
                                  dtFinalizacao = string.IsNullOrWhiteSpace(txtDataFinalizacao.Text) ? (DateTime?)null : DateTime.Parse(txtDataFinalizacao.Text.Trim()),
                                  idCampanha = idCampanha,
                                  idCampanhaCopia = int.Parse(ddlCampanhaCopia.SelectedValue),
                                  fgCopiaClientes = cblCampanhaCopia.Items[0].Selected,
                                  fgCopiaAtendentes = cblCampanhaCopia.Items[1].Selected,
                                  fgCopiaRegra = cblCampanhaCopia.Items[2].Selected,
                                  idTipoCampanha = int.Parse(ddlTipoCampanha.SelectedValue)
                              };



                Retorno<Campanha> objReturn;

                if (idCampanha > 0)
                {
                    //UPDATE
                    objReturn = CampanhaBLL.Update(obj);
                }
                else
                {
                    //INSERT
                    objReturn = CampanhaBLL.Insert(obj);
                    idCampanha = objReturn.ID;
                }

                //Retorno
                if (objReturn.Error == Enumerator.Error.Success)
                {
                    //Copiar dados de outra campanha
                    //if (CopiarCampanha(idCampanha) == Enumerator.Error.Success)
                    //{
                    Funcao.Alert(Page, "Gravado com sucesso");
                    //lblMsg.Text = "Gravado com sucesso";
                    CarregarGridCampanha();
                    mvCampanha.ActiveViewIndex = 0;
                    //}
                }
                else
                    Funcao.Alert(Page, objReturn.Message);
                //lblMsg.Text = objReturn.Message;
            }
        }
        #endregion

        #region GravarSituacao
        protected void GravarSituacao()
        {
            if (ValidarSituacao())
            {
                var idCampanhaStatus = int.Parse(hfidCampanhaStatus.Value);
                var obj = new CampanhaStatus
                                  {
                                      idCampanha = int.Parse(hfCampanhaId.Value),
                                      idStatus = int.Parse(ddlSituacao.SelectedValue),
                                      Dias = Convert.ToInt16(txtQtdDias.Text),
                                      Qtd = Convert.ToInt16(txtIncidencia.Text)
                                  };
                if (idCampanhaStatus > 0)
                {
                    //ALTERAR SITUACAO
                    obj.idCampanhaStatus = idCampanhaStatus;
                    var retorno = CampanhaStatusBLL.Update(obj);
                    //PRIMEIRO EXCLUIR TODAS AS REGRAS DA SITUACAO
                    if (ExcluirTodasRegras(idCampanhaStatus) == Enumerator.Error.Success && retorno.Error == Enumerator.Error.Success)
                    {
                        //GRAVAR AS REGRAS DA SITUACAO
                        GravarRegra(idCampanhaStatus);
                        //GravarIncidencia(int.Parse(hfCampanhaId.Value),int.Parse(ddlSituacao.SelectedValue));
                    }
                }
                else
                {
                    //NOVA SITUACAO

                    var retorno = CampanhaStatusBLL.Insert(obj);
                    if (retorno.Error == Enumerator.Error.Success)
                    {
                        GravarRegra(retorno.ID);
                        //GravarIncidencia(int.Parse(hfCampanhaId.Value), retorno.ID);
                    }
                    else
                        Funcao.Alert(Page, retorno.Message);
                    //lblMsg.Text = retorno.Message;
                }
                LimparCamposSituacao();
            }
        }
        #endregion

        //protected void GravarIncidencia(int idCampanha, int idSituacao)
        //{

        //    if (ExcluirIncidencia(idCampanha, idSituacao, Convert.ToInt16(txtIncidencia.Text)))
        //    {
        //        var list = new List<StatusIncidencia>();


        //        var obj = new StatusIncidencia
        //                      {
        //                          idSituacao = idSituacao,
        //                          idCampanha = idCampanha,
        //                          qtd = Convert.ToInt16(txtIncidencia.Text),
        //                          dias = chkBloquear.Checked ? 0 : Convert.ToInt16(txtIncidencia.Text),
        //                          fgBloqueio = chkBloquear.Checked
        //                      };
        //        list.Add(obj);
        //        var retorno = StatusIncidenciaBLL.Insert(list);
        //        if (retorno.Error == Enumerator.Error.Success)
        //        {
        //            Funcao.Alert(ClientScript, "Regra gravada com sucesso");
        //        }
        //        else
        //            Funcao.Alert(ClientScript, retorno.Message);
        //    }

        //}
        //#region ExcluirIncidencia
        //protected bool ExcluirIncidencia(int idCampanha, int idSituacao,int Incidencia)
        //{
        //    var obj = new StatusIncidencia
        //                  {
        //                      idCampanha = idCampanha,
        //                      idSituacao = idSituacao,
        //                      qtd = Incidencia
        //                  };
        //    var retorno = StatusIncidenciaBLL.Delete(obj);
        //    if (retorno.Error == Enumerator.Error.Failed)
        //        Funcao.Alert(ClientScript, retorno.Message);
        //    return retorno.Error == Enumerator.Error.Success;
        //}
        //#endregion

        #region GravarRegra
        protected void GravarRegra(int idCampanhaStatus)
        {
            var obj = new CampanhaStatusRegra
                          {
                              idCampanhaStatus = idCampanhaStatus
                          };
            foreach (ListItem item in cblRegra.Items)
            {
                if (item.Selected)
                {
                    obj.idRegra = int.Parse(item.Value);
                    var retorno = CampanhaStatusRegraBLL.Insert(obj);
                    if (retorno.Error != Enumerator.Error.Success)
                    {
                        Funcao.Alert(Page, retorno.Message);
                        //lblMsg.Text = retorno.Message;
                        break;
                    }
                }
                Funcao.Alert(Page, "Gravado com sucesso");
                //lblMsg.Text = "Gravado com sucesso";
                CarregarGridSituacao();
            }
        }
        #endregion

        #region GravarCliente
        protected void GravarCliente()
        {
            int erro = 0;
            if (ValidarCliente())
            {
                var idCampanha = int.Parse(hfCampanhaId.Value);
                //PRIMEIRO EXCLUIR TODAS OS CLIENTES
                //if (ExcluirTodosClientes(idCampanha) == Enumerator.Error.Success)
                //{
                //GRAVAR CLIENTES
                var obj = new CampanhaCliente();
                obj.idCampanha = idCampanha;
                foreach (ListItem item in lbClientePesquisa.Items)
                {
                    if (item.Selected)
                    {
                        obj.idCliente = int.Parse(item.Value);

                        //Verifica se o cliente já está cadastrado para a campanha
                        var retornoCliente = CampanhaClienteBLL.Select(idCampanha, obj.idCliente);
                        if (retornoCliente.Error == Enumerator.Error.NoRegistry)
                        {
                            //Cliente não está cadastrado para a campanha, inserir cliente
                            var retorno = CampanhaClienteBLL.Insert(obj);
                            if (retorno.Error != Enumerator.Error.Success)
                            {
                                erro++;
                                //Ocorreu erro
                                Funcao.Alert(Page, retorno.Message);
                                //lblMsg.Text = retorno.Message;
                                break;
                            }
                        }
                        else if (retornoCliente.Error == Enumerator.Error.Failed)
                        {
                            erro++;
                            //Ocorreu erro
                            Funcao.Alert(Page, retornoCliente.Message);
                            break;
                        }
                    }
                }
                if (erro.Equals(0))
                    Funcao.Alert(Page, "Gravado com sucesso");
                //lblMsg.Text = "Gravado com sucesso";
                //}
            }
        }

        //protected void GravarCliente()
        //{
        //    if (ValidarCliente())
        //    {
        //        var idCampanha = int.Parse(hfCampanhaId.Value);
        //        //PRIMEIRO EXCLUIR TODAS OS CLIENTES
        //        if (ExcluirTodosClientes(idCampanha) == Enumerator.Error.Success)
        //        {
        //            //GRAVAR CLIENTES
        //            var obj = new CampanhaCliente();
        //            obj.idCampanha = idCampanha;
        //            foreach (ListItem item in cblCliente.Items)
        //            {
        //                if (item.Selected)
        //                {
        //                    obj.idCliente = int.Parse(item.Value);
        //                    var retorno = CampanhaClienteBLL.Insert(obj);
        //                    if (retorno.Error != Enumerator.Error.Success)
        //                    {
        //                        Funcao.Alert(Page, retorno.Message);
        //                        //lblMsg.Text = retorno.Message;
        //                        break;
        //                    }
        //                }
        //            }
        //            Funcao.Alert(Page, "Gravado com sucesso");
        //            //lblMsg.Text = "Gravado com sucesso";
        //        }
        //    }
        //}
        #endregion

        #region AdicionarCliente
        protected void AdicionarCliente()
        {
            GravarCliente();
            ListCliente = null;
            CarregarListBoxCliente();
            //CarregarListBoxClienteSelecionado();
        }
        #endregion

        #region RemoverCliente
        protected void RemoverCliente()
        {
            if (ExcluirClientes() == Enumerator.Error.Success)
            {
                //ListCliente = null;
                //CarregarListBoxCliente();
                ListClienteSelecionado = null;
                CarregarListBoxClienteSelecionado();
                Funcao.Alert(Page, "Removido com sucesso");
            }
        }
        #endregion

        #region ExcluirTodasRegras
        protected Enumerator.Error ExcluirTodasRegras(int idCampoStatus)
        {
            var retorno = CampanhaStatusRegraBLL.Delete(idCampoStatus);
            if (retorno.Error == Enumerator.Error.Failed)
                Funcao.Alert(Page, retorno.Message);
            //lblMsg.Text = retorno.Message;
            return retorno.Error;
        }
        #endregion

        #region ExcluirTodosClientes
        protected Enumerator.Error ExcluirTodosClientes(int idCampanha)
        {
            var retorno = CampanhaClienteBLL.Delete(idCampanha);
            if (retorno.Error == Enumerator.Error.Failed)
                Funcao.Alert(Page, retorno.Message);
            //lblMsg.Text = retorno.Message;
            return retorno.Error;
        }
        #endregion

        #region ExcluirClientes
        protected Enumerator.Error ExcluirClientes()
        {
            var idCampanha = int.Parse(hfCampanhaId.Value);
            foreach (ListItem li in lbClienteSelecionado.Items)
            {
                if (li.Selected)
                {
                    var idCliente = int.Parse(li.Value);
                    var retorno = CampanhaClienteBLL.Delete(idCampanha, idCliente);
                    if (retorno.Error == Enumerator.Error.Failed)
                    {
                        Funcao.Alert(Page, retorno.Message);
                        return retorno.Error;
                    }
                }
            }
            return Enumerator.Error.Success;
        }
        #endregion

        #region ValidarCampanha
        protected bool ValidarCampanha()
        {
            string msg = string.Empty;
            if (string.IsNullOrWhiteSpace(txtNomeCampanha.Text))
            {
                msg = "Preencha o campo Nome Campanha";
                txtNomeCampanha.Focus();
            }
            else if (string.IsNullOrWhiteSpace(txtDescricao.Text))
            {
                msg = "Preencha o campo Descrição Campanha";
                txtDescricao.Focus();
            }
            else if (!string.IsNullOrWhiteSpace(txtDataFinalizacao.Text) && !Funcao.IsDate(txtDataFinalizacao.Text.Trim()))
            {
                msg = "Data Finalização inválida";
                txtDataFinalizacao.Focus();
            }
            else if (ddlTipoCampanha.SelectedValue == "0")
            {
                msg = "Selecione um tipo de Campanha";
                ddlTipoCampanha.Focus();
            }
            var retorno = string.IsNullOrWhiteSpace(msg);
            if (!retorno)
                Funcao.Alert(Page, msg);
            //lblMsg.Text = msg;
            return retorno;
        }
        #endregion

        #region ValidarSituacao
        protected bool ValidarSituacao()
        {
            string msg = string.Empty;
            if (ddlSituacao.SelectedValue.Equals("0"))
            {
                msg = "Selecione a situação";
                ddlSituacao.Focus();
            }
            else if (cblRegra.SelectedIndex == -1)
            {
                msg = "Selecione a regra";
                cblRegra.Focus();
            }
            //else if (hfidCampanhaStatus.Value.Equals("0") && CampanhaStatusBLL.Select(int.Parse(hfCampanhaId.Value), int.Parse(ddlSituacao.SelectedValue)).Error == Enumerator.Error.Success)
            //{
            //    msg = "Esta situação já esta cadastrada.";
            //    ddlSituacao.Focus();
            //}
            else if (txtQtdDias.Text == string.Empty)
            {
                msg = "Informe a quantidade de dias do status";
                txtQtdDias.Focus();
            }
            else if (txtIncidencia.Text == string.Empty)
            {
                msg = "Informe a incidencia deste status";
                txtIncidencia.Focus();
            }
            var retorno = string.IsNullOrWhiteSpace(msg);
            if (!retorno)
                Funcao.Alert(Page, msg);
            //lblMsg.Text = msg;
            return retorno;
        }
        #endregion

        #region ValidarCliente
        protected bool ValidarCliente()
        {
            string msg = string.Empty;
            if (lbClientePesquisa.SelectedIndex == -1)
            {
                msg = "Selecione o cliente";
                cblRegra.Focus();
            }
            var retorno = string.IsNullOrWhiteSpace(msg);
            if (!retorno)
                Funcao.Alert(Page, msg);
            //lblMsg.Text = msg;
            return retorno;
        }
        #endregion

        #region GravarTodosClientes
        protected void GravarTodosClientes()
        {
            if (lbClientePesquisa.Items.Count > 0)
            {
                foreach (ListItem obj in lbClientePesquisa.Items)
                {
                    var cliente = new CampanhaCliente();
                    cliente.idCliente = int.Parse(obj.Value);
                    cliente.idCampanha = int.Parse(hfCampanhaId.Value);
                    var retorno = CampanhaClienteBLL.Insert(cliente);
                    if (retorno.Error == Enumerator.Error.Failed)
                    {
                        Funcao.Alert(Page, retorno.Message);
                        break;
                    }
                }
                Funcao.Alert(Page, "Gravado com sucesso");
                ListCliente = null;
                CarregarListBoxCliente();
                CarregarListBoxClienteSelecionado();
            }
        }
        #endregion

        #region CopiarCampanha
        protected Enumerator.Error CopiarCampanha(int idCampanhaNova)
        {
            int idCampanha = int.Parse(ddlCampanhaCopia.SelectedValue);
            if (idCampanha > 0 && cblCampanhaCopia.SelectedIndex > -1)
            {
                foreach (ListItem tipo in cblCampanhaCopia.Items)
                {
                    if (tipo.Selected)
                    {
                        switch (tipo.Value)
                        {
                            case "0":
                                //Clientes
                                var retornoCliente = CampanhaClienteBLL.CopiaCliente(idCampanha, idCampanhaNova);
                                if (retornoCliente.Error == Enumerator.Error.Failed)
                                {
                                    Funcao.Alert(Page, retornoCliente.Message);
                                    return Enumerator.Error.Failed;
                                }
                                break;
                            case "1":
                                //Atendentes
                                var retornoAtendente = CampanhaAtendenteBLL.CopiaAtendente(idCampanha, idCampanhaNova);
                                if (retornoAtendente.Error == Enumerator.Error.Failed)
                                {
                                    Funcao.Alert(Page, retornoAtendente.Message);
                                    return Enumerator.Error.Failed;
                                }
                                break;
                            case "2":
                                //Situações e Regras
                                var retornoStatusRegra = CampanhaStatusBLL.CopiaStatus(idCampanha, idCampanhaNova);
                                if (retornoStatusRegra.Error == Enumerator.Error.Success)
                                {
                                    var retornoRegra = CampanhaStatusRegraBLL.CopiaRegra(idCampanha, idCampanhaNova);
                                    if (retornoRegra.Error == Enumerator.Error.Failed)
                                    {
                                        Funcao.Alert(Page, retornoRegra.Message);
                                        return Enumerator.Error.Failed;
                                    }
                                }
                                else
                                {
                                    Funcao.Alert(Page, retornoStatusRegra.Message);
                                    return Enumerator.Error.Failed;
                                }
                                break;
                        }
                    }
                }
            }
            return Enumerator.Error.Success;
        }
        #endregion

        #region ValidarAtendente
        protected bool ValidarAtendente()
        {
            string msg = string.Empty;
            if (lbAtendente.SelectedIndex == -1)
            {
                msg = "Selecione o atendente";
                cblRegra.Focus();
            }
            var retorno = string.IsNullOrWhiteSpace(msg);
            if (!retorno)
                Funcao.Alert(Page, msg);
            return retorno;
        }
        #endregion

        #region GravarAtendente
        protected void GravarAtendente()
        {
            if (ValidarAtendente())
            {
                var idCampanha = int.Parse(hfCampanhaId.Value);
                //PRIMEIRO EXCLUIR TODAS OS CLIENTES
                //if (ExcluirTodosClientes(idCampanha) == Enumerator.Error.Success)
                //{
                //GRAVAR ATENDENTES
                var obj = new CampanhaAtendente();
                obj.idCampanha = idCampanha;
                foreach (ListItem item in lbAtendente.Items)
                {
                    if (item.Selected)
                    {
                        obj.idAtendente = int.Parse(item.Value);

                        //Verifica se o atendente já está cadastrado para a campanha
                        var retornoAtendente = CampanhaAtendenteBLL.Select(idCampanha, obj.idAtendente);
                        if (retornoAtendente.Error == Enumerator.Error.NoRegistry)
                        {
                            //Atendente não está cadastrado para a campanha, inserir atendente
                            var retorno = CampanhaAtendenteBLL.Insert(obj);
                            if (retorno.Error != Enumerator.Error.Success)
                            {
                                //Ocorreu erro
                                Funcao.Alert(Page, retorno.Message);
                                //lblMsg.Text = retorno.Message;
                                break;
                            }
                        }
                        else if (retornoAtendente.Error == Enumerator.Error.Failed)
                        {
                            //Ocorreu erro
                            Funcao.Alert(Page, retornoAtendente.Message);
                            break;
                        }
                    }
                }
                //Funcao.Alert(Page, "Gravado com sucesso");
                //lblMsg.Text = "Gravado com sucesso";
                //}
            }
        }
        #endregion

        #region ExcluirAtendentes
        protected Enumerator.Error ExcluirAtendentes()
        {
            var idCampanha = int.Parse(hfCampanhaId.Value);
            foreach (ListItem li in lbAtendenteSelecionado.Items)
            {
                if (li.Selected)
                {
                    var idAtendente = int.Parse(li.Value);
                    var retorno = CampanhaAtendenteBLL.Delete(idCampanha, idAtendente);
                    if (retorno.Error == Enumerator.Error.Failed)
                    {
                        Funcao.Alert(Page, retorno.Message);
                        return retorno.Error;
                    }
                }
            }
            return Enumerator.Error.Success;
        }
        #endregion

        #region AdicionarAtendente
        protected void AdicionarAtendente()
        {
            GravarAtendente();
            ListAtendente = null;
            CarregarListBoxAtendente();
            CarregarListBoxAtendenteSelecionado();
        }
        #endregion

        #region RemoverAtendente
        protected void RemoverAtendente()
        {
            ExcluirAtendentes();
            ListAtendente = null;
            CarregarListBoxAtendente();
            CarregarListBoxAtendenteSelecionado();
        }
        #endregion

        #region GravarTodosAtendentes
        protected void GravarTodosAtendentes()
        {
            if (ListAtendente.Count > 0)
            {
                foreach (var obj in ListAtendente)
                {
                    var atend = new CampanhaAtendente();
                    atend.idAtendente = obj.idAtendente;
                    atend.idCampanha = int.Parse(hfCampanhaId.Value);
                    var retorno = CampanhaAtendenteBLL.Insert(atend);
                    if (retorno.Error == Enumerator.Error.Failed)
                    {
                        Funcao.Alert(Page, retorno.Message);
                        break;
                    }
                }
                Funcao.Alert(Page, "Gravado com sucesso");
                ListAtendente = null;
                CarregarListBoxAtendente();
                CarregarListBoxAtendenteSelecionado();
            }
        }
        #endregion

        #region CarregarListBoxAtendente
        protected void CarregarListBoxAtendente()
        {
            lbAtendente.Items.Clear();
            var idCampanha = int.Parse(hfCampanhaId.Value);
            var filtro = txtFiltroAtendente.Text.Trim();
            var letra = ddlLetraAtendente.SelectedValue;
            //if (string.IsNullOrWhiteSpace(letra))
            //    letra = "A";
            var retorno = new Retorno<CampanhaAtendente>();
            if (ListAtendente.Count <= 0)
            {
                retorno = CampanhaAtendenteBLL.SelectAtendenteSemCampanha(idCampanha, filtro, letra);
                ListAtendente = (List<CampanhaAtendente>)retorno.List;
            }
            else
            {
                retorno.Error = Enumerator.Error.Success;
                retorno.Message = "OK";
                retorno.List = ListAtendente;
            }

            if (retorno.Error == Enumerator.Error.Success)
            {
                var pg = new PagedDataSource();
                pg.DataSource = retorno.List;
                pg.PageSize = 500;
                pg.AllowPaging = true;
                int paginaAtual = 1;
                if (!int.TryParse(ddlPaginaAtendente.SelectedValue, out paginaAtual))
                    paginaAtual = 0;
                else
                    paginaAtual = paginaAtual - 1;
                pg.CurrentPageIndex = paginaAtual;
                CarregaComboPaginaAtendente(pg.PageCount, ddlPaginaAtendente);

                lblTotalAtendente.Text = pg.DataSourceCount.ToString();
                lbAtendente.DataTextField = "NomeAtendente";
                lbAtendente.DataValueField = "idAtendente";
                lbAtendente.DataSource = pg;
            }
            else if (retorno.Error == Enumerator.Error.Failed)
                Funcao.Alert(Page, retorno.Message);
            else
                lbAtendente.DataSource = "";
            lbAtendente.DataBind();
        }
        #endregion

        #region CarregarListBoxAtendenteSelecionado
        protected void CarregarListBoxAtendenteSelecionado()
        {
            lbAtendenteSelecionado.Items.Clear();
            var idCampanha = int.Parse(hfCampanhaId.Value);
            var filtro = txtFiltroAtendenteSelecionado.Text.Trim();
            var letra = ddlLetraAtendenteSelecionado.SelectedValue;
            //if (string.IsNullOrWhiteSpace(letra))
            //    letra = "A";
            var retorno = CampanhaAtendenteBLL.Select(idCampanha, filtro, letra);
            if (retorno.Error == Enumerator.Error.Success)
            {
                var pg = new PagedDataSource();
                pg.DataSource = retorno.List;
                pg.PageSize = 500;
                pg.AllowPaging = true;
                int paginaAtual = 1;
                if (!int.TryParse(ddlPaginaAtendenteSelecionado.SelectedValue, out paginaAtual))
                    paginaAtual = 0;
                else
                    paginaAtual = paginaAtual - 1;
                pg.CurrentPageIndex = paginaAtual;
                CarregaComboPaginaAtendente(pg.PageCount, ddlPaginaAtendenteSelecionado);

                lbAtendenteSelecionado.DataTextField = "NomeAtendente";
                lbAtendenteSelecionado.DataValueField = "idAtendente";
                //lbClienteSelecionado.DataSource = retorno.List;
                lbAtendenteSelecionado.DataSource = pg;

                //Total de atendentes da campanha
                var retornoQ = CampanhaAtendenteBLL.QuantidadeAtendenteCampanha(idCampanha);
                if (retornoQ.Error == Enumerator.Error.Success)
                {
                    lblTotalAtendenteCampanha.Text = retornoQ.ID.ToString();
                }
                else
                    Funcao.Alert(Page, retornoQ.Message);
            }
            else if (retorno.Error == Enumerator.Error.Failed)
                Funcao.Alert(Page, retorno.Message);
            lbAtendenteSelecionado.DataBind();
        }
        #endregion

        #endregion

        #region Eventos

        #region btnGravar_Click
        protected void btnGravar_Click(object sender, EventArgs e)
        {
            GravarCampanha();
        }
        #endregion

        #region btnVoltar_Click
        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            mvCampanha.ActiveViewIndex = 0;
        }
        #endregion

        #region btnNovo_Click
        protected void btnNovo_Click(object sender, EventArgs e)
        {
            LimparCampos();
            mvCampanha.ActiveViewIndex = 1;
            thCopiardados.Visible = true;
            lblCopiar.Visible = true;
            ddlCampanhaCopia.Visible = true;
            cblCampanhaCopia.Visible = true;
            dvGravar.Visible = btnGravar.Visible = true;
        }
        #endregion

        #region btnGravarSituacao_Click
        protected void btnGravarSituacao_Click(object sender, EventArgs e)
        {
            GravarSituacao();
        }
        #endregion

        #region btnNovaSituacao_Click
        protected void btnNovaSituacao_Click(object sender, EventArgs e)
        {
            LimparCamposSituacao();
        }
        #endregion

        #region gvCampanha_RowCommand
        protected void gvCampanha_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            int index = int.Parse(e.CommandArgument.ToString());
            int idCampanha = int.Parse(gvCampanha.DataKeys[index]["idCampanha"].ToString());
            bool status = bool.Parse(gvCampanha.DataKeys[index]["fgAtivo"].ToString());
            switch (e.CommandName)
            {
                case "situacao":
                    Situacao(idCampanha);
                    break;
                case "cliente":
                    Cliente(idCampanha);
                    break;
                case "atendente":
                    Atendentes(idCampanha);
                    break;
                case "editar":
                    EditarCampanha(idCampanha);
                    break;
                case "excluir":
                    ExcluirCampanha(idCampanha);
                    break;
                case "status":
                    HabilitarDesabilitar(idCampanha, status);
                    break;
            }
        }
        #endregion

        #region gvCampanha_RowDataBound
        protected void gvCampanha_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                var status = bool.Parse(gvCampanha.DataKeys[e.Row.RowIndex]["fgAtivo"].ToString());
                var botao = e.Row.FindControl("btnStatus") as Button;
                if (botao != null)
                {
                    if (status)
                        botao.Text = "Desabilitar";
                    else
                        botao.Text = "Habilitar";
                }
            }
        }
        #endregion

        #region gvSituacao_RowCommand
        protected void gvSituacao_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            var index = int.Parse(e.CommandArgument.ToString());
            var idStatus = int.Parse(gvSituacao.DataKeys[index]["idStatus"].ToString());
            var idCampanhaStatus = int.Parse(gvSituacao.DataKeys[index]["idCampanhaStatus"].ToString());
            var qtd = int.Parse(gvSituacao.DataKeys[index]["Qtd"].ToString());
            var dias = int.Parse(gvSituacao.DataKeys[index]["Dias"].ToString());
            //var fgbloqueado = Convert.ToBoolean(gvSituacao.DataKeys[index]["fgBloqueio"].ToString());
            switch (e.CommandName)
            {
                case "editar":
                    EditarSituacao(idStatus, idCampanhaStatus, qtd, dias);
                    break;
                case "excluir":
                    ExcluirSituacao(idCampanhaStatus);
                    break;
            }
        }
        #endregion

        #region gvSituacao_RowDataBound
        protected void gvSituacao_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                var rpt = e.Row.FindControl("rptRegra") as Repeater;
                if (rpt != null)
                {
                    var idCampanhaStatus = int.Parse(gvSituacao.DataKeys[e.Row.RowIndex]["idCampanhaStatus"].ToString());
                    CarregarRptRegra(rpt, idCampanhaStatus);
                }
            }
        }
        #endregion

        #region btnAdicionar_Click
        protected void btnAdicionar_Click(object sender, EventArgs e)
        {
            AdicionarCliente();
        }
        #endregion

        #region btnRemover_Click
        protected void btnRemover_Click(object sender, EventArgs e)
        {
            RemoverCliente();
        }
        #endregion

        #region btnGravarTodos_Click
        protected void btnGravarTodos_Click(object sender, EventArgs e)
        {
            GravarTodosClientes();
        }
        #endregion

        #region btnFiltroCliente_Click
        protected void btnFiltroCliente_Click(object sender, EventArgs e)
        {
            //ListCliente = null;
            CarregarListBoxCliente();
        }
        #endregion

        #region btnFiltroClienteSelecionado_Click
        protected void btnFiltroClienteSelecionado_Click(object sender, EventArgs e)
        {
            CarregarListBoxClienteSelecionado();
        }
        #endregion

        #region ddlPaginaCliente_SelectedIndexChanged
        protected void ddlPaginaCliente_SelectedIndexChanged(object sender, EventArgs e)
        {
            PaginaAtualCliente = int.Parse(ddlPaginaCliente.SelectedValue);
            CarregarListBoxCliente();
            ddlPaginaCliente.SelectedIndex = ddlPaginaCliente.Items.IndexOf(ddlPaginaCliente.Items.FindByText(PaginaAtualCliente.ToString()));
        }
        #endregion

        #region ddlPaginaClienteSelecionado_SelectedIndexChanged
        protected void ddlPaginaClienteSelecionado_SelectedIndexChanged(object sender, EventArgs e)
        {
            PaginaAtualClienteSelecionado = int.Parse(ddlPaginaClienteSelecionado.SelectedValue);
            CarregarListBoxClienteSelecionado();
            ddlPaginaClienteSelecionado.SelectedIndex = ddlPaginaClienteSelecionado.Items.IndexOf(ddlPaginaClienteSelecionado.Items.FindByText(PaginaAtualClienteSelecionado.ToString()));
        }
        #endregion

        #region ddlLetraCliente_SelectedIndexChanged
        protected void ddlLetraCliente_SelectedIndexChanged(object sender, EventArgs e)
        {
            //ListCliente = null;
            CarregarListBoxCliente();
        }
        #endregion

        #region ddlLetraClienteSelecionado_SelectedIndexChanged
        protected void ddlLetraClienteSelecionado_SelectedIndexChanged(object sender, EventArgs e)
        {
            //ListClienteSelecionado = null;
            CarregarListBoxClienteSelecionado();
        }
        #endregion

        #region btnAdicionarAtendente_Click
        protected void btnAdicionarAtendente_Click(object sender, EventArgs e)
        {
            AdicionarAtendente();
        }
        #endregion

        #region btnRemoverAtendente_Click
        protected void btnRemoverAtendente_Click(object sender, EventArgs e)
        {
            RemoverAtendente();
        }
        #endregion

        #region btnGravarTodosAtendente_Click
        protected void btnGravarTodosAtendente_Click(object sender, EventArgs e)
        {
            GravarTodosAtendentes();
        }
        #endregion

        #region btnFiltroAtendente_Click
        protected void btnFiltroAtendente_Click(object sender, EventArgs e)
        {
            ListAtendente = null;
            CarregarListBoxAtendente();
        }
        #endregion

        #region btnFiltroAtendenteSelecionado_Click
        protected void btnFiltroAtendenteSelecionado_Click(object sender, EventArgs e)
        {
            CarregarListBoxAtendenteSelecionado();
        }
        #endregion

        #region ddlPaginaAtendente_SelectedIndexChanged
        protected void ddlPaginaAtendente_SelectedIndexChanged(object sender, EventArgs e)
        {
            PaginaAtualAtendente = int.Parse(ddlPaginaAtendente.SelectedValue);
            CarregarListBoxAtendente();
            ddlPaginaAtendente.SelectedIndex = ddlPaginaAtendente.Items.IndexOf(ddlPaginaAtendente.Items.FindByText(PaginaAtualAtendente.ToString()));
        }
        #endregion

        #region ddlPaginaAtendenteSelecionado_SelectedIndexChanged
        protected void ddlPaginaAtendenteSelecionado_SelectedIndexChanged(object sender, EventArgs e)
        {
            PaginaAtualAtendenteSelecionado = int.Parse(ddlPaginaAtendenteSelecionado.SelectedValue);
            CarregarListBoxAtendenteSelecionado();
            ddlPaginaAtendenteSelecionado.SelectedIndex = ddlPaginaAtendenteSelecionado.Items.IndexOf(ddlPaginaAtendenteSelecionado.Items.FindByText(PaginaAtualAtendenteSelecionado.ToString()));
        }
        #endregion

        #region ddlLetraAtendente_SelectedIndexChanged
        protected void ddlLetraAtendente_SelectedIndexChanged(object sender, EventArgs e)
        {
            ListAtendente = null;
            CarregarListBoxAtendente();
        }
        #endregion

        #region ddlLetraAtendenteSelecionado_SelectedIndexChanged
        protected void ddlLetraAtendenteSelecionado_SelectedIndexChanged(object sender, EventArgs e)
        {
            ListAtendenteSelecionado = null;
            CarregarListBoxAtendenteSelecionado();
        }
        #endregion

        #region btnPesquisarCliente_Click
        protected void btnPesquisarCliente_Click(object sender, EventArgs e)
        {
            if (TabContainer1.ActiveTabIndex == 0)
            {
                ListCliente = null;
                CarregarListBoxCliente();
            }
            else
            {
                ListClienteSelecionado = null;
                CarregarListBoxClienteSelecionado();
            }
        }
        #endregion

        protected void btnFiltrar_Click(object sender, EventArgs e)
        {
            CarregarGridCampanha();
        }

        #endregion

        

    }
}